package com.nextel.project.cliente.rms;

import com.nextel.project.Configuracion; 
import com.nextel.project.cliente.ControlCliente;
import com.nextel.project.cliente.bean.ClientePorNombreBean;
import com.nextel.project.util.BuscarListener;


import pe.com.nextel.rms.GestorRMS;
import pe.com.nextel.rms.Persistente;
import java.util.Stack;
import javax.microedition.rms.RecordEnumeration;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Iterator;
import pe.com.nextel.util.List;
import pe.com.nextel.util.StringUtils;

/**
 *
 * @author eespinoza
 */
public class RMSClientePorNombre extends GestorRMS {

    private ClientePorNombreBean nombreCliente = new ClientePorNombreBean();
//    private boolean available = false;

    public RMSClientePorNombre() {
        super("INDXNOMCLIENTE");

    }

    protected Persistente createObjectBean() {
        return nombreCliente;
    }

    public void grabarClientePorNombre(Stack objectStack) throws Exception {

        try {
            abrirRS();

            Object obj;
            ClientePorNombreBean bean;

            int i = 0;
            List lista = new ArrayList();
            //mientras haya datos en la pila
            while ((obj = objectStack.pop()) != null) {

                bean = (ClientePorNombreBean) obj;
                if (i % 50 == 0 && !lista.isEmpty()) {
                    guardar(lista);
                    lista.clear();
                    System.gc();
                }
                lista.add(bean);
                i++;

            }

            if (!lista.isEmpty()) {
                guardar(lista);
                lista.clear();
                System.gc();
            }

            lista = null;

        } finally {
            cerrarRS();
        }
    }

    public synchronized void buscarPorNombreClientes(String nombreCliente, BuscarListener listener) throws Exception {
//        //#debug
//        System.out.println("rms.buscarPorNombreClientes" + nombreCliente);

        try {
           
            abrirRS();

            RecordEnumeration en = enumerateRecords();

            List lista = new ArrayList();
          
            int i = 0;

            StringUtils.getStaticsMemoria();

            while (en.hasNextElement() && !listener.esFinalizadaBusqueda( )) {


                int id = en.nextRecordId();

                Iterator it = getRecordList(id).iterator();

                while (it.hasNext() && !listener.esFinalizadaBusqueda( )) {

                    ClientePorNombreBean bean = (ClientePorNombreBean) it.next();
                    
                    if (bean.getNombreCliente().indexOf(nombreCliente) > -1) {
                        lista.add(bean);
                        i++;
                    }

                    bean = null;
                    
                    if ((i % 5 == 0) && !lista.isEmpty()) {
                        listener.agregarElementosVectorDatos(lista);
                        lista.clear();
//                        System.gc();
                    }
                    
                }
                
                if (!lista.isEmpty()) {
                    listener.agregarElementosVectorDatos(lista);
                    lista.clear();
//                    System.gc();
                }

            }

            StringUtils.getStaticsMemoria();

            if (listener != null) {
                listener.finalizo();
            }

            lista = null;
//            System.gc();

        } finally {

            cerrarRS();
        }
    }

     
}
